metainsight-context-engine 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/BOOTSTRAP.md ADDED
@@ -0,0 +1,341 @@
1
+ # COS Bootstrap — 前置条件初始化
2
+
3
+ > Cloud Context Engine 的基础设施初始化模块,负责在引擎启动前确保所有云端资源就绪。
4
+
5
+ ## 概述
6
+
7
+ `cos-bootstrap.ts` 是 Cloud Context Engine 的**第一个执行步骤**。它会自动检测并创建以下云端资源:
8
+
9
+ 1. **COS 存储桶** — 用于存储所有文档和数据
10
+ 2. **CI 数据集** — 用于智能文档搜索(支持多个数据集)
11
+ 3. **数据集绑定** — 将数据集关联到存储桶中的指定路径前缀
12
+
13
+ ```
14
+ ┌──────────────────────────────────────────────────────────────────────┐
15
+ │ COS 存储桶 │
16
+ │ openclaw-metainsight-{APPID} │
17
+ │ │
18
+ │ ┌─────────────────┐ ┌──────────────────────────┐ ┌───────────┐ │
19
+ │ │ memory/ │ │ asset/ │ │ 其他路径/ │ │
20
+ │ │ *.md │ │ *.jpg/png/pdf/... │ │ (可扩展) │ │
21
+ │ └──────┬──────────┘ └──────┬──────────┬─────────┘ └─────┬─────┘ │
22
+ │ │ │ │ │ │
23
+ │ ▼ ▼ ▼ ▼ │
24
+ │ ┌─────────────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
25
+ │ │ memory 数据集 │ │ image │ │ document │ │ 自定义 │ │
26
+ │ │ DocSearch │ │ ImgSearch│ │ DocSearch│ │ (可扩展) │ │
27
+ │ └─────────────────┘ └──────────┘ └──────────┘ └───────────┘ │
28
+ └──────────────────────────────────────────────────────────────────────┘
29
+ ```
30
+
31
+ ## 前置条件
32
+
33
+ ### 1. 获取腾讯云访问密钥
34
+
35
+ 前往 [腾讯云 CAM 控制台](https://console.cloud.tencent.com/cam/capi) 获取以下信息:
36
+
37
+ | 参数 | 说明 | 示例 |
38
+ |------|------|------|
39
+ | **SecretId** | 访问密钥 ID | `AKIDxxxxxxxxxxxxxxxxxxxx` |
40
+ | **SecretKey** | 访问密钥 Key | `xxxxxxxxxxxxxxxxxxxxxxxxx` |
41
+ | **APPID** | 腾讯云账号 APPID | `1253311026` |
42
+
43
+ > ⚠️ **安全提示**:密钥应通过环境变量或安全配置管理传入,切勿硬编码到代码中。
44
+
45
+ ### 2. 地域限制
46
+
47
+ COS CI(智能内容识别)仅支持以下地域:
48
+
49
+ | 地域 | 地域代码 |
50
+ |------|----------|
51
+ | 北京 | `ap-beijing` |
52
+ | 上海 | `ap-shanghai` |
53
+ | 成都 | `ap-chengdu` |
54
+
55
+ ### 3. SDK 依赖
56
+
57
+ ```bash
58
+ npm install cos-nodejs-sdk-v5
59
+ ```
60
+
61
+ > **注意**:必须使用 `cos-nodejs-sdk-v5`(Node.js 版本),不支持 `cos-js-sdk-v5`(浏览器版本)。
62
+
63
+ ## 配置说明
64
+
65
+ ### 最小配置(使用默认值)
66
+
67
+ ```typescript
68
+ import { bootstrap } from './cos-bootstrap.js';
69
+
70
+ const outcome = await bootstrap({
71
+ secretId: process.env.COS_SECRET_ID!,
72
+ secretKey: process.env.COS_SECRET_KEY!,
73
+ appId: process.env.COS_APPID!,
74
+ }, logger);
75
+ ```
76
+
77
+ 默认行为:
78
+ - **bucket**: `openclaw-metainsight`(自动拼接 APPID → `openclaw-metainsight-{APPID}`)
79
+ - **region**: `ap-beijing`
80
+ - **datasets**: 三个默认数据集
81
+ - `openclaw-memory` — 绑定到 `memory/` 路径(对话记忆,DocSearch)
82
+ - `openclaw-image` — 绑定到 `asset/` 路径(图片检索,ImageSearch)
83
+ - `openclaw-document` — 绑定到 `asset/` 路径(文档检索,DocSearch)
84
+
85
+ ### 完整配置
86
+
87
+ ```typescript
88
+ const outcome = await bootstrap({
89
+ secretId: 'AKIDxxxx',
90
+ secretKey: 'xxxx',
91
+ appId: '1253311026',
92
+
93
+ // 可选:自定义 bucket 名称(不含 APPID 后缀)
94
+ bucket: 'my-custom-bucket',
95
+
96
+ // 可选:自定义地域
97
+ region: 'ap-shanghai',
98
+
99
+ // 可选:自定义数据集定义
100
+ datasets: [
101
+ {
102
+ name: 'my-memory',
103
+ cosPrefix: 'memory/',
104
+ templateId: 'Official:DocSearch',
105
+ description: '对话记忆文档数据集',
106
+ },
107
+ ],
108
+ }, logger);
109
+ ```
110
+
111
+ ### 配置字段说明
112
+
113
+ #### `CosBootstrapConfig`
114
+
115
+ | 字段 | 必填 | 默认值 | 说明 |
116
+ |------|------|--------|------|
117
+ | `secretId` | ✅ | — | 腾讯云访问密钥 ID |
118
+ | `secretKey` | ✅ | — | 腾讯云访问密钥 Key |
119
+ | `appId` | ✅ | — | 腾讯云 APPID,从 [CAM 控制台](https://console.cloud.tencent.com/cam/capi) 获取 |
120
+ | `bucket` | ❌ | `openclaw-metainsight` | 存储桶短名称(不含 APPID 后缀,会自动拼接) |
121
+ | `region` | ❌ | `ap-beijing` | COS 地域代码 |
122
+ | `datasets` | ❌ | memory + image + document 数据集 | 数据集定义数组 |
123
+
124
+ #### `DatasetDefinition`
125
+
126
+ | 字段 | 必填 | 默认值 | 说明 |
127
+ |------|------|--------|------|
128
+ | `name` | ✅ | — | CI 数据集名称(APPID 范围内唯一) |
129
+ | `cosPrefix` | ✅ | `{name}/` | COS 路径前缀,绑定覆盖的范围(必须以 `/` 结尾) |
130
+ | `templateId` | ❌ | `Official:DocSearch` | CI 数据集模板 |
131
+ | `description` | ❌ | 自动生成 | 数据集描述 |
132
+
133
+ #### 可用的数据集模板
134
+
135
+ | 模板 ID | 说明 | 适用场景 |
136
+ |---------|------|----------|
137
+ | `Official:DocSearch` | 文档搜索 | memory 等文本文档 |
138
+ | `Official:ImageSearch` | 图像搜索 | 图像内容检索 |
139
+ | `Official:FaceSearch` | 人脸搜索 | 人脸识别检索 |
140
+ | `Official:COSBasicMeta` | COS 基础元信息 | 文件元数据索引 |
141
+
142
+ ## 数据集架构
143
+
144
+ ### 默认数据集
145
+
146
+ 当 `datasets` 参数省略时,自动创建以下三个数据集:
147
+
148
+ #### memory 数据集
149
+
150
+ ```
151
+ 数据集名称: openclaw-memory
152
+ 绑定路径: cos://{bucket}/memory/
153
+ 模板: Official:DocSearch
154
+ 用途: 存储对话记忆文档,支持语义搜索
155
+ ```
156
+
157
+ 文件存储约定:
158
+ ```
159
+ memory/
160
+ ├── conversation-{id}.json # 对话记忆
161
+ ├── summary-{id}.json # 对话摘要
162
+ └── ...
163
+ ```
164
+
165
+ #### image 数据集
166
+
167
+ ```
168
+ 数据集名称: openclaw-image
169
+ 绑定路径: cos://{bucket}/asset/
170
+ 模板: Official:ImageSearch
171
+ 用途: 图片内容检索,支持多模态(文本→图片)语义搜索
172
+ ```
173
+
174
+ #### document 数据集
175
+
176
+ ```
177
+ 数据集名称: openclaw-document
178
+ 绑定路径: cos://{bucket}/asset/
179
+ 模板: Official:DocSearch
180
+ 用途: 文档内容检索,对 asset/ 目录下的文档进行语义搜索
181
+ ```
182
+
183
+ 文件存储约定:
184
+ ```
185
+ asset/
186
+ ├── screenshot.png # 图片文件(由 image 数据集索引)
187
+ ├── images/
188
+ │ └── photo.jpg
189
+ ├── report.pdf # 文档文件(由 document 数据集索引)
190
+ └── ...
191
+ ```
192
+
193
+ > 📝 **多 Agent 模式**下,数据集名称会带上 agentId:
194
+ > - memory: `openclaw-{agentId}-memory`(路径: `openclaw-{agentId}/workspace/`)
195
+ > - image: `openclaw-{agentId}-image`(路径: `openclaw-{agentId}/asset/`)
196
+ > - document: `openclaw-{agentId}-document`(路径: `openclaw-{agentId}/asset/`)
197
+
198
+ ### 如何扩展新数据集
199
+
200
+ 只需在 `datasets` 数组中追加新定义:
201
+
202
+ ```typescript
203
+ datasets: [
204
+ // 已有默认数据集(显式声明时需手动包含)
205
+ { name: 'openclaw-memory', cosPrefix: 'memory/' },
206
+ { name: 'openclaw-image', cosPrefix: 'asset/', templateId: 'Official:ImageSearch' },
207
+ { name: 'openclaw-document', cosPrefix: 'asset/' },
208
+
209
+ // 新增:知识库数据集
210
+ {
211
+ name: 'openclaw-knowledge',
212
+ cosPrefix: 'knowledge/',
213
+ templateId: 'Official:DocSearch',
214
+ description: '外部知识库文档数据集',
215
+ },
216
+ ],
217
+ ```
218
+
219
+ Bootstrap 会自动:
220
+ 1. 检测每个数据集是否存在,不存在则创建
221
+ 2. 检测每个数据集的绑定是否存在,不存在则创建
222
+ 3. 所有操作都是**幂等的**:重复运行不会出错
223
+
224
+ ## Bootstrap 输出
225
+
226
+ ```typescript
227
+ interface BootstrapOutcome {
228
+ success: boolean; // 整体是否成功
229
+ cos: COS; // COS SDK 实例(后续操作直接使用)
230
+ config: ResolvedCosConfig; // 解析后的完整配置
231
+ bucketCreated: boolean; // 存储桶是否是本次新创建的
232
+ datasetOutcomes: Array<{ // 每个数据集的初始化结果
233
+ name: string; // 数据集名称
234
+ cosPrefix: string; // 绑定路径
235
+ datasetCreated: boolean; // 是否新创建
236
+ bindingCreated: boolean; // 绑定是否新创建
237
+ }>;
238
+ error?: string; // 失败时的错误信息
239
+ }
240
+ ```
241
+
242
+ ## 执行流程
243
+
244
+ ```
245
+ bootstrap(config, logger)
246
+
247
+
248
+ ┌─ resolveConfig ──────────────────────────────┐
249
+ │ • 校验 appId、region │
250
+ │ • 拼接 bucket: {name}-{APPID} │
251
+ │ • 解析 datasets(默认: memory + image + document)│
252
+ │ • 校验无重复数据集名称 │
253
+ └──────────────────────────────────────────────┘
254
+
255
+
256
+ ┌─ Step 1: 存储桶 ─────────────────────────────┐
257
+ │ headBucket → 存在? 跳过 : putBucket 创建 │
258
+ └──────────────────────────────────────────────┘
259
+
260
+
261
+ ┌─ Step 2: 遍历 datasets ──────────────────────┐
262
+ │ for each dataset: │
263
+ │ 2a. GET /dataset → 存在? 跳过 : POST 创建 │
264
+ │ 2b. GET /datasetbinding → 存在? 跳过 : │
265
+ │ POST 创建 (URI: cos://{bucket}/{prefix})│
266
+ └──────────────────────────────────────────────┘
267
+
268
+
269
+ BootstrapOutcome { success: true, ... }
270
+ ```
271
+
272
+ ## 辅助工具
273
+
274
+ ### `sendCIRequest()` — CI API 通用请求
275
+
276
+ ```typescript
277
+ import { sendCIRequest, getCOSInstance } from './cos-bootstrap.js';
278
+
279
+ const cos = getCOSInstance(secretId, secretKey);
280
+ const result = await sendCIRequest(
281
+ cos,
282
+ 'bucket-name-1253311026',
283
+ 'ap-beijing',
284
+ 'POST', // HTTP 方法
285
+ 'datasetquery/hybridsearch', // CI API 端点
286
+ { /* 请求体 */ },
287
+ { /* 查询参数 */ },
288
+ );
289
+ ```
290
+
291
+ 该方法自动处理:
292
+ - COS SDK 签名鉴权
293
+ - JSON 请求/响应序列化
294
+ - CI API Host 拼接(`{bucket}.ci.{region}.myqcloud.com`)
295
+
296
+ ### `getCOSInstance()` — COS SDK 单例
297
+
298
+ 相同 `secretId` 返回同一实例,避免重复初始化:
299
+
300
+ ```typescript
301
+ const cos1 = getCOSInstance(secretId, secretKey);
302
+ const cos2 = getCOSInstance(secretId, secretKey);
303
+ // cos1 === cos2 → true
304
+ ```
305
+
306
+ ## 内置保障
307
+
308
+ | 特性 | 说明 |
309
+ |------|------|
310
+ | **幂等性** | 所有操作都是先检测后创建,重复执行安全无副作用 |
311
+ | **自动重试** | 网络请求失败自动重试 2 次,指数退避(1s / 2s) |
312
+ | **TTL 缓存** | 数据集和绑定查询结果缓存 5 分钟,减少 API 调用 |
313
+ | **错误容错** | 新建桶后查询数据集可能返回 400(而非 404),已兼容处理 |
314
+ | **Bucket 命名** | 自动拼接 APPID 后缀,已含 APPID 时不重复拼接 |
315
+ | **cosPrefix 规范化** | 自动在路径末尾补 `/` |
316
+
317
+ ## 常见问题
318
+
319
+ ### Q: APPID 在哪里获取?
320
+
321
+ 前往 [腾讯云 CAM 控制台](https://console.cloud.tencent.com/cam/capi),APPID 显示在密钥列表上方的账号信息区域。也可以通过 `getService`(ListBuckets)API 从返回的 Owner 字段获取。
322
+
323
+ ### Q: 为什么 Bucket 名称要带 APPID?
324
+
325
+ COS 全局 Bucket 命名格式为 `{BucketName}-{APPID}`,这是腾讯云的强制要求。Bootstrap 会自动处理拼接。
326
+
327
+ ### Q: 数据集绑定后多久生效?
328
+
329
+ 绑定创建后状态会从 `Creating` 变为 `Running`,通常在几秒内完成。绑定生效后,往对应路径上传的文件会自动被索引。
330
+
331
+ ### Q: 能否给同一路径绑定多个数据集?
332
+
333
+ 可以。`image` 和 `document` 数据集都绑定到 `asset/` 路径,但使用不同的模板(`ImageSearch` vs `DocSearch`)。CI 会根据模板类型对同一路径下的文件进行不同方式的索引。
334
+
335
+ ### Q: memory 数据集的数据源是什么?
336
+
337
+ memory 数据集绑定到 `memory/` 路径,数据源是本地的 memory 文件夹中的对话记忆文件。上传到 `cos://{bucket}/memory/` 的 JSON 文件会自动被 CI 索引,支持后续的语义搜索。
338
+
339
+ ### Q: image 数据集如何使用?
340
+
341
+ image 数据集绑定到 `asset/` 路径,使用 `Official:ImageSearch` 模板。上传到 `cos://{bucket}/asset/` 的图片文件(jpg/png 等)会自动被 CI 索引。检索时通过 `category="image"` 路由到该数据集,`Templates` 会自动切换为 `ImageSearch`,支持文本→图片的多模态语义搜索。
package/README.md ADDED
@@ -0,0 +1,230 @@
1
+ # MetaInsight Context Engine
2
+
3
+ > Token-efficient context management with cloud-based memory retrieval, powered by Tencent COS + CI.
4
+
5
+ ## 简介
6
+
7
+ MetaInsight Context Engine 是一个 OpenClaw 上下文引擎插件,通过腾讯云 COS(对象存储)和 CI(数据万象)提供**云端语义记忆检索**能力。它可以将本地记忆文件自动同步到云端,并在每轮对话前智能召回与当前问题最相关的历史记忆、图片和文档,注入到 LLM 的上下文中。
8
+
9
+ ### 核心能力
10
+
11
+ - 🧠 **记忆自动召回** — 每轮对话前从云端向量数据库检索相关记忆片段
12
+ - 📁 **本地记忆同步** — 自动将 `MEMORY.md`、每日日志和引用的图片/文档同步到云端
13
+ - 🔍 **多模态搜索** — 支持文本语义搜索(DocSearch)和图片搜索(ImageSearch)
14
+ - 🛠 **LLM 工具** — 注册 `cloud_memory_search` 工具,LLM 可主动搜索云端记忆
15
+ - ☁️ **基础设施自动化** — 启动时自动创建存储桶、数据集和绑定,全部幂等
16
+
17
+ ## 前置要求
18
+
19
+ - OpenClaw >= 2026.3.11
20
+ - 腾讯云账号,需获取以下凭证:
21
+ - **SecretId** / **SecretKey** — [API 密钥管理](https://console.cloud.tencent.com/cam/capi)
22
+ - **APPID** — 同一页面可查看
23
+
24
+ > ⚠️ CI 数据万象仅支持 `ap-beijing`、`ap-shanghai`、`ap-chengdu` 三个区域。
25
+
26
+ ### 权限要求
27
+
28
+ 插件需要腾讯云账号具备以下 API 权限:
29
+
30
+ | 权限类别 | 所需权限说明 |
31
+ | -------------- | ------------------------------------------------------------------------------------------- |
32
+ | **存储桶操作** | 创建存储桶(`PUT Bucket`)、查询存储桶(`GET Bucket`)、设置存储桶配置等 |
33
+ | **文件操作** | 上传文件(`PUT Object`)、下载文件(`GET Object`)、删除文件(`DELETE Object`)、列出文件等 |
34
+ | **数据集操作** | 创建数据集(`CreateDataset`)、绑定数据集(`CreateDatasetBinding`)、搜索数据集等 CI 接口 |
35
+
36
+ > 🔑 **子账号用户注意**:如果您使用的是 CAM 子账号(子用户),需要联系主账号管理员为其授予上述 COS + CI 相关权限。可通过 [CAM 策略管理](https://console.cloud.tencent.com/cam/policy) 绑定预设策略 `QcloudCOSFullAccess` + `QcloudCIFullAccess`,或创建自定义策略授权所需接口。
37
+
38
+ ### 存储桶与数据集
39
+
40
+ **推荐使用自动创建**:插件启动时会自动检测并创建所需的存储桶(Bucket)和数据集(Dataset),无需手动操作。只需配置好必填的凭证信息即可。
41
+
42
+ 如果您选择手动指定已有的存储桶或数据集名称,请确保:
43
+
44
+ 1. **地域一致** — 存储桶和数据集必须位于同一地域,且仅支持 `ap-beijing`、`ap-shanghai`、`ap-chengdu`
45
+ 2. **存储桶名称格式** — COS 存储桶的完整名称格式为 `{bucket}-{appId}`,配置中只需填写 `bucket` 部分(如 `openclaw-metainsight`),插件会自动拼接 APPID
46
+ 3. **数据集绑定** — 手动创建的数据集需要正确绑定到对应的 COS 存储桶路径前缀,否则搜索功能无法正常工作
47
+
48
+ ## 安装
49
+
50
+ 将插件目录放置到 OpenClaw 的 `extensions/` 目录下,然后安装依赖:
51
+
52
+ ```bash
53
+ cd extensions/metainsight-context-engine
54
+ npm install --omit=dev
55
+ ```
56
+
57
+ ## 配置
58
+
59
+ 编辑 `~/.openclaw/openclaw.json`,添加插件配置:
60
+
61
+ ```jsonc
62
+ {
63
+ "plugins": {
64
+ "slots": {
65
+ "contextEngine": "metainsight-context-engine"
66
+ },
67
+ "entries": {
68
+ "metainsight-context-engine": {
69
+ "enabled": true,
70
+ "config": {
71
+ // === 必填 ===
72
+ "secretId": "AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
73
+ "secretKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
74
+ "appId": "1253311026",
75
+
76
+ // === 可选(建议不填, 以下均为默认值)===
77
+ "bucket": "openclaw-metainsight", // 推荐留空或使用默认值,插件会自动创建
78
+ "region": "ap-beijing",
79
+ "datasetName": "openclaw-metainsight-doc", // 推荐留空或使用默认值,插件会自动创建
80
+ "agentId": "", // 默认取当前 agent 上下文中的 agentId
81
+ "memoryAutoRecall": true,
82
+ "localMemorySync": true,
83
+ "maxRecallResults": 3,
84
+ "minScore": 0.5,
85
+ "matchThreshold": 60,
86
+
87
+ // === 同步文件类型(建议不填, 默认值如下,可按需增减)===
88
+ "syncFileExtensions": [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".svg", ".ico", ".tiff", ".tif", ".avif", ".heic", ".heif", ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".txt", ".csv", ".md", ".rtf"]
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
94
+ ```
95
+
96
+ ### 配置项一览
97
+
98
+ #### 必填项
99
+
100
+ | 配置项 | 类型 | 说明 |
101
+ | ----------- | ------ | ------------------------------- |
102
+ | `secretId` | string | 腾讯云 SecretId |
103
+ | `secretKey` | string | 腾讯云 SecretKey |
104
+ | `appId` | string | 腾讯云 APPID(如 `1253311026`) |
105
+
106
+ #### 核心配置(建议不填, 使用插件全自动处理)
107
+
108
+ | 配置项 | 类型 | 默认值 | 说明 |
109
+ | ------------- | ------ | -------------------------- | ----------------------------------------------------------------------------------------- |
110
+ | `agentId` | string | `""` | Agent ID,用于多 agent 数据隔离。留空则自动取当前 agent 上下文中的 agentId |
111
+ | `bucket` | string | `openclaw-metainsight` | COS 存储桶名称(**推荐使用默认值,插件自动创建**;手动指定需确保地域一致) |
112
+ | `region` | string | `ap-beijing` | COS 区域,仅支持 `ap-beijing` / `ap-shanghai` / `ap-chengdu` |
113
+ | `datasetName` | string | `openclaw-metainsight-doc` | CI 数据集名称(**推荐使用默认值,插件自动创建**;手动指定需确保与存储桶同地域且正确绑定) |
114
+
115
+ #### 记忆召回(建议不填, 使用插件全自动处理)
116
+
117
+ | 配置项 | 类型 | 默认值 | 说明 |
118
+ | ------------------ | ------- | ------ | ------------------------------------- |
119
+ | `memoryAutoRecall` | boolean | `true` | 每轮对话前自动从云端召回相关记忆 |
120
+ | `maxRecallResults` | number | `3` | 每轮最多召回的记忆片段数 |
121
+ | `minScore` | number | `0.5` | 搜索结果最低相关性分数(0-1) |
122
+ | `matchThreshold` | number | `60` | 匹配阈值 0-100(CI 推荐 80,默认 60) |
123
+
124
+ #### 本地记忆同步(建议不填, 使用插件全自动处理)
125
+
126
+ | 配置项 | 类型 | 默认值 | 说明 |
127
+ | -------------------- | -------- | ------- | ------------------------------------------- |
128
+ | `localMemorySync` | boolean | `true` | 启用本地记忆文件同步到云端 |
129
+ | `syncLongTermMemory` | boolean | `true` | 同步 MEMORY.md(需 `localMemorySync=true`) |
130
+ | `syncDailyLogs` | boolean | `true` | 同步每日日志(需 `localMemorySync=true`) |
131
+ | `syncFileExtensions` | string[] | 见下方 | 扫描并上传的文件扩展名 |
132
+
133
+ <details>
134
+ <summary><code>syncFileExtensions</code> 默认值</summary>
135
+
136
+ ```
137
+ .png, .jpg, .jpeg, .gif, .bmp, .webp, .svg, .ico, .tiff, .tif, .avif, .heic, .heif,
138
+ .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .txt, .csv, .md, .rtf
139
+ ```
140
+
141
+ </details>
142
+
143
+ ## 工作原理
144
+
145
+ ### 启动阶段
146
+
147
+ ```
148
+ Gateway 启动
149
+
150
+ ├─ 注册 CloudContextEngine
151
+ ├─ 注册 cloud_memory_search 工具
152
+ ├─ 注册 Hooks(llm_input / llm_output / before_prompt_build / after_tool_call)
153
+
154
+ └─ 异步初始化(fire-and-forget):
155
+ ├─ 清除磁盘哈希缓存(确保全量重新评估)
156
+ ├─ 初始化 COS SDK + Bootstrap 云端资源
157
+ │ ├─ 创建存储桶(如不存在)
158
+ │ └─ 创建 3 个数据集 + COS 绑定
159
+ │ ├─ {agentId}-memory (DocSearch → workspace/)
160
+ │ ├─ {agentId}-image (ImageSearch → asset/)
161
+ │ └─ {agentId}-document (DocSearch → asset/)
162
+
163
+ └─ 全量本地记忆同步(最多重试 3 次)
164
+ ├─ 扫描 MEMORY.md + memory/*.md
165
+ ├─ SHA-256 哈希比对 → 仅上传变更文件
166
+ └─ 提取并上传引用的图片/文档资产
167
+ ```
168
+
169
+ ### 每轮对话
170
+
171
+ ```
172
+ 用户发送消息
173
+
174
+
175
+ before_prompt_build Hook
176
+ ├─ 清理用户消息(去除时间戳、元数据)
177
+ ├─ 并行搜索 3 个数据集(memory / image / document)
178
+ └─ 将检索结果注入上下文:
179
+ ├─ 记忆片段 → 替换系统提示中的 "Memory Recall" 层
180
+ ├─ 能力声明 → prependSystemContext
181
+ └─ 图片/文档 → prependContext(用户消息前)
182
+
183
+
184
+ LLM 生成响应
185
+ ├─ llm_input → 缓存系统提示(供下轮检索用)
186
+ └─ llm_output → 保存响应到调试文件
187
+
188
+
189
+ 如果 LLM 写入了记忆文件
190
+ └─ after_tool_call → 立即同步到云端
191
+
192
+
193
+ 每 5 轮触发一次全量本地记忆同步
194
+ ```
195
+
196
+ ## 云端存储结构
197
+
198
+ ```
199
+ {bucket}-{appId}/
200
+ └── openclaw-{agentId}/
201
+ ├── workspace/ ← 记忆文件(memory 数据集绑定此前缀)
202
+ │ └── memory/
203
+ │ ├── MEMORY.md
204
+ │ └── 2026-03-17.md
205
+ └── asset/ ← 图片和文档(image + document 数据集绑定此前缀)
206
+ ├── screenshot.png
207
+ └── report.pdf
208
+ ```
209
+
210
+ ## 调试
211
+
212
+ 插件会在以下位置保存调试文件:
213
+
214
+ - `~/.openclaw/debug/system-prompts/` — 每轮的完整系统提示
215
+ - `~/.openclaw/debug/llm-outputs/` — LLM 的原始响应
216
+
217
+ 哈希缓存文件:
218
+
219
+ - `~/.openclaw/.sync-hash-cache.json` — 本地文件的 SHA-256 哈希缓存(启动时自动清空)
220
+
221
+ ## 依赖服务
222
+
223
+ | 服务 | 用途 |
224
+ | --------------------------------------------------- | -------------------------------- |
225
+ | [腾讯云 COS](https://cloud.tencent.com/product/cos) | 对象存储,存放记忆文件和资产 |
226
+ | [腾讯云 CI](https://cloud.tencent.com/product/ci) | 数据万象,提供向量索引和语义搜索 |
227
+
228
+ ## 许可
229
+
230
+ 与 OpenClaw 主项目保持一致。